home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d14
/
baswind8.arc
/
TAGDIR.SUB
< prev
next >
Wrap
Text File
|
1990-09-14
|
6KB
|
122 lines
'
'
'******************************************************************************
' Function : TAGDIR *
' *
' Purpose: *
' *
' *
' Results: *
' *
' Usage : *
' *
' *
' Date Written : 09/01/90 - Date Tested: 09/01/90 - Author: James P Morgan *
' Date Modified: - : - : *
'-----------------------------------------------------------------------------*
' NOTE: *
'******************************************************************************
' *
' SUB PROGRAM NAME (PARAMETERS) STATIC/RECURSIVE *
'-----------------------------------------------------------------------------*
' *
SUB TAGDIR(SEARCH$,SHOWITEMS%,FORE%,BACK%,HFORE%,HBACK%,QUADRANT$,SHADOW%,NUMTAGGED%,TAG$(1),RETURN.CODE%) STATIC
DEFINT A-Z 'make all short intergers by default
RETURN.CODE%=0
DIR.RETURN.CODE%=0
TAG.MIN%=LBOUND(TAG$) 'adjust for callers OPTION BASE
TAG.MAX=(UBOUND(TAG$)-TAG.MIN%)+1 'user reserved spaces for this many tagged filenames
'
'am not sure that FILES$ will be placed in FAR HEAP, since it is var. string array
'
REM $DYNAMIC 'allocate arrays off far heap
DIM FILES$(TAG.MIN% TO TAG.MIN%+1) 'make each one ONLY 1 element to start with
DIM TAGITEMS%(TAG.MIN% TO TAG.MIN%+1) 'make each one ONLY 1 element to start with
REM $STATIC 'default arrays back to Basics Data segment
TAGDIR.START:
ATTR=NUMFILES%
COUNT=&HFF00 OR ATTR 'Get number of filenames that match SEARCH$
I=INT(VARPTR(FILES$(TAG.MIN%)))
CALL DIR(SEARCH$,I,COUNT,DIR.RETURN.CODE)
IF (COUNT=-1) OR (COUNT = 0) THEN 'were any matching filenames found?
NUMFILES%=0 'NO
RETURN.CODE%=-2
SELECTFILE$="No Files Found"
GOTO TAGDIR.DONE
END IF
NUMFILES%=COUNT
IF COUNT > 0 THEN 're-allocate filename array big
REDIM FILES$(TAG.MIN% TO TAG.MIN%+COUNT) 'enough to hold all found
REDIM TAGITEMS%(TAG.MIN% TO TAG.MIN%+COUNT) 'make them same BASE as callers array
END IF
HEADER$=SEARCH$ 'this was the search filename spec
TEMPHDR$=SPACE$(16)
PAD=8-(LEN(HEADER$)/2)-.5
MID$(TEMPHDR$,PAD+1,LEN(HEADER$))=HEADER$
HEADER$=TEMPHDR$
'
FOR I=TAG.MIN% TO TAG.MIN%+COUNT 'make each filename array element
FILES$(I)=SPACE$(22) 'big enough to hold a filename
NEXT
COUNT=ATTR
I=INT(VARPTR(FILES$(TAG.MIN%))) 'point address of first element of the array
CALL DIR(SEARCH$,I,COUNT,DIR.RETURN.CODE%) 'load the filenames into the array
FOR J=TAG.MIN% TO TAG.MIN%+COUNT 'allow for room in front of filename
FILES$(J)=" "+FILES$(J) 'to 'tag' it
NEXT
MAXITEMS%=COUNT 'we have this many filenames to display
SHOWFILES=SHOWITEMS% 'but only display this many at a time
IF (NUMTAGGED%<1) OR (NUMTAGGED%>TAG.MAX) THEN
NUMTAGGED%=TAG.MAX 'allow only this many to be tagged (all we have room for)
END IF
CALL TAGLIST(HEADER$,SHOWITEMS%,MAXITEMS%,NUMTAGGED%,FILES$(),TAGITEMS%(),FORE%,BACK%,HFORE%,HBACK%,QUADRANT$,SHADOW%,RETURN.CODE%)
IF NUMTAGGED%<1 THEN 'did user 'tag' any filenames
GOTO TAGDIR.DONE 'NO
ENDIF
IF RETURN.CODE<0 THEN 'did user 'tag' any filenames
GOTO TAGDIR.DONE 'NO
ENDIF
'
' Return the filenames tagged.
'
I=TAG.MIN% 'base subscript for the array
FOR J=TAG.MIN% TO TAG.MIN%+COUNT 'look at all the filenames
IF TAGITEMS%(J)=1 THEN 'was this one tagged?
TAG$(I)=MID$(FILES$(J),3)
I=I+1 'keep count of the number we found tagged
END IF
NEXT
TAGDIR.DONE:
ERASE FILES$ 'free memory allocated to arrays
ERASE TAGITEMS%
HEADER$=""
TEMPHDR$=""
END SUB